{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 第四步：调整树参数：subsample 和 colsample_bytree"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(粗调，参数的步长为0.1；下一步是在粗调最佳参数周围，将步长降为0.05，进行精细调整)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/karen/anaconda3/lib/python3.6/site-packages/sklearn/cross_validation.py:41: DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the refactored classes and functions are moved. Also note that the interface of the new CV iterators are different from that of this module. This module will be removed in 0.20.\n",
      "  \"This module will be removed in 0.20.\", DeprecationWarning)\n"
     ]
    }
   ],
   "source": [
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "      <th>interest_level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.5</td>\n",
       "      <td>3</td>\n",
       "      <td>3000</td>\n",
       "      <td>1200.0</td>\n",
       "      <td>750.000000</td>\n",
       "      <td>-1.5</td>\n",
       "      <td>4.5</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>5465</td>\n",
       "      <td>2732.5</td>\n",
       "      <td>1821.666667</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.0</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>17</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3275</td>\n",
       "      <td>1637.5</td>\n",
       "      <td>1637.500000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>18</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>3350</td>\n",
       "      <td>1675.0</td>\n",
       "      <td>670.000000</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>28</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 228 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.5         3   3000           1200.0      750.000000       -1.5   \n",
       "1        1.0         2   5465           2732.5     1821.666667       -1.0   \n",
       "2        1.0         1   2850           1425.0     1425.000000        0.0   \n",
       "3        1.0         1   3275           1637.5     1637.500000        0.0   \n",
       "4        1.0         4   3350           1675.0      670.000000       -3.0   \n",
       "\n",
       "   room_num  Year  Month  Day       ...        walk  walls  war  washer  \\\n",
       "0       4.5  2016      6   24       ...           0      0    0       0   \n",
       "1       3.0  2016      6   12       ...           0      0    0       0   \n",
       "2       2.0  2016      4   17       ...           0      0    0       0   \n",
       "3       2.0  2016      4   18       ...           0      0    0       0   \n",
       "4       5.0  2016      4   28       ...           0      0    1       0   \n",
       "\n",
       "   water  wheelchair  wifi  windows  work  interest_level  \n",
       "0      0           0     0        0     0               1  \n",
       "1      0           0     0        0     0               2  \n",
       "2      0           0     0        0     0               0  \n",
       "3      0           0     0        0     0               2  \n",
       "4      0           0     0        0     0               2  \n",
       "\n",
       "[5 rows x 228 columns]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# path to where the data lies\n",
    "dpath = './data/'\n",
    "train = pd.read_csv(dpath +\"RentListingInquries_FE_train.csv\")\n",
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 将数据分割训练数据与测试数据\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "# 获取特征，标签\n",
    "y = train['interest_level']\n",
    "X = train.drop(['interest_level'], axis=1)\n",
    "\n",
    "# 由于数据集较大，在此随机采样30%的数据构建训练样本，其余作为测试样本\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=33, test_size=0.7, stratify=y)\n",
    "X_train = np.array(X_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# prepare cross validation\n",
    "# 各类样本不均衡，交叉验证是采用StratifiedKFold，在每折采样时各类样本按比例采样\n",
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "根据前面几步调优得到的最佳参数：n_estimators=124，max_depth=5，min_child_weight=4，其余参数继续默认值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'colsample_bytree': [0.6, 0.7, 0.8, 0.9],\n",
       " 'subsample': [0.3, 0.4, 0.5, 0.6, 0.7, 0.8]}"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#max_depth 建议3-10， min_child_weight=1／sqrt(ratio_rare_event) =5.5\n",
    "subsample = [i/10.0 for i in range(3,9)]\n",
    "colsample_bytree = [i/10.0 for i in range(6,10)]\n",
    "param_test3_1 = dict(subsample=subsample, colsample_bytree=colsample_bytree)\n",
    "param_test3_1\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/karen/anaconda3/lib/python3.6/site-packages/sklearn/model_selection/_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.61765, std: 0.00524, params: {'colsample_bytree': 0.6, 'subsample': 0.3},\n",
       "  mean: -0.61263, std: 0.00696, params: {'colsample_bytree': 0.6, 'subsample': 0.4},\n",
       "  mean: -0.61227, std: 0.00475, params: {'colsample_bytree': 0.6, 'subsample': 0.5},\n",
       "  mean: -0.60918, std: 0.00521, params: {'colsample_bytree': 0.6, 'subsample': 0.6},\n",
       "  mean: -0.61046, std: 0.00363, params: {'colsample_bytree': 0.6, 'subsample': 0.7},\n",
       "  mean: -0.61108, std: 0.00312, params: {'colsample_bytree': 0.6, 'subsample': 0.8},\n",
       "  mean: -0.61810, std: 0.00532, params: {'colsample_bytree': 0.7, 'subsample': 0.3},\n",
       "  mean: -0.61394, std: 0.00455, params: {'colsample_bytree': 0.7, 'subsample': 0.4},\n",
       "  mean: -0.61307, std: 0.00358, params: {'colsample_bytree': 0.7, 'subsample': 0.5},\n",
       "  mean: -0.61031, std: 0.00451, params: {'colsample_bytree': 0.7, 'subsample': 0.6},\n",
       "  mean: -0.60913, std: 0.00366, params: {'colsample_bytree': 0.7, 'subsample': 0.7},\n",
       "  mean: -0.60926, std: 0.00442, params: {'colsample_bytree': 0.7, 'subsample': 0.8},\n",
       "  mean: -0.61539, std: 0.00493, params: {'colsample_bytree': 0.8, 'subsample': 0.3},\n",
       "  mean: -0.61237, std: 0.00490, params: {'colsample_bytree': 0.8, 'subsample': 0.4},\n",
       "  mean: -0.61087, std: 0.00446, params: {'colsample_bytree': 0.8, 'subsample': 0.5},\n",
       "  mean: -0.61095, std: 0.00520, params: {'colsample_bytree': 0.8, 'subsample': 0.6},\n",
       "  mean: -0.61011, std: 0.00408, params: {'colsample_bytree': 0.8, 'subsample': 0.7},\n",
       "  mean: -0.61119, std: 0.00399, params: {'colsample_bytree': 0.8, 'subsample': 0.8},\n",
       "  mean: -0.61735, std: 0.00484, params: {'colsample_bytree': 0.9, 'subsample': 0.3},\n",
       "  mean: -0.61278, std: 0.00402, params: {'colsample_bytree': 0.9, 'subsample': 0.4},\n",
       "  mean: -0.61148, std: 0.00516, params: {'colsample_bytree': 0.9, 'subsample': 0.5},\n",
       "  mean: -0.61112, std: 0.00575, params: {'colsample_bytree': 0.9, 'subsample': 0.6},\n",
       "  mean: -0.61023, std: 0.00482, params: {'colsample_bytree': 0.9, 'subsample': 0.7},\n",
       "  mean: -0.60902, std: 0.00403, params: {'colsample_bytree': 0.9, 'subsample': 0.8}],\n",
       " {'colsample_bytree': 0.9, 'subsample': 0.8},\n",
       " -0.60901907031949298)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 前面参数调整得到的最优值代入\n",
    "xgb3_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=124,  \n",
    "        max_depth=5,\n",
    "        min_child_weight=4,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "\n",
    "gsearch3_1 = GridSearchCV(xgb3_1, param_grid = param_test3_1, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch3_1.fit(X_train , y_train)\n",
    "\n",
    "gsearch3_1.grid_scores_, gsearch3_1.best_params_,     gsearch3_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/karen/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/Users/karen/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/Users/karen/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/Users/karen/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/Users/karen/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/Users/karen/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/Users/karen/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([ 20.69132037,  21.93997006,  23.90315084,  23.80048432,\n",
       "         22.87654042,  22.49227819,  21.72677836,  24.606182  ,\n",
       "         26.85138273,  26.19959016,  25.38569632,  24.51107559,\n",
       "         23.35687695,  27.21901522,  29.89207363,  30.41051087,\n",
       "         29.04306006,  28.21722498,  26.21966181,  30.32986574,\n",
       "         33.17166061,  33.00779605,  31.90939741,  29.63662848]),\n",
       " 'mean_score_time': array([ 0.11268258,  0.10581951,  0.10359502,  0.10668545,  0.10004516,\n",
       "         0.10765262,  0.10627155,  0.10687103,  0.10173845,  0.10118237,\n",
       "         0.10318885,  0.10382895,  0.10366578,  0.10184345,  0.1063715 ,\n",
       "         0.10078549,  0.10261121,  0.09888   ,  0.10137219,  0.099647  ,\n",
       "         0.10339098,  0.1005394 ,  0.10126753,  0.09442172]),\n",
       " 'mean_test_score': array([-0.61765118, -0.61262575, -0.61227303, -0.60917864, -0.61046087,\n",
       "        -0.61108202, -0.61810431, -0.61393695, -0.61306993, -0.61031138,\n",
       "        -0.60912879, -0.60926201, -0.61538913, -0.61237117, -0.6108668 ,\n",
       "        -0.61095384, -0.61010639, -0.61119289, -0.61735398, -0.61277897,\n",
       "        -0.61148235, -0.61112266, -0.61023437, -0.60901907]),\n",
       " 'mean_train_score': array([-0.51154114, -0.50520324, -0.49989678, -0.49752199, -0.49649599,\n",
       "        -0.49620543, -0.50553982, -0.50000462, -0.49636712, -0.49468202,\n",
       "        -0.49364249, -0.49285783, -0.50530928, -0.49822769, -0.49382144,\n",
       "        -0.48993215, -0.49192137, -0.49126576, -0.50144153, -0.49490222,\n",
       "        -0.49074833, -0.4885914 , -0.48878128, -0.48824103]),\n",
       " 'param_colsample_bytree': masked_array(data = [0.6 0.6 0.6 0.6 0.6 0.6 0.7 0.7 0.7 0.7 0.7 0.7 0.8 0.8 0.8 0.8 0.8 0.8\n",
       "  0.9 0.9 0.9 0.9 0.9 0.9],\n",
       "              mask = [False False False False False False False False False False False False\n",
       "  False False False False False False False False False False False False],\n",
       "        fill_value = ?),\n",
       " 'param_subsample': masked_array(data = [0.3 0.4 0.5 0.6 0.7 0.8 0.3 0.4 0.5 0.6 0.7 0.8 0.3 0.4 0.5 0.6 0.7 0.8\n",
       "  0.3 0.4 0.5 0.6 0.7 0.8],\n",
       "              mask = [False False False False False False False False False False False False\n",
       "  False False False False False False False False False False False False],\n",
       "        fill_value = ?),\n",
       " 'params': [{'colsample_bytree': 0.6, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.8}],\n",
       " 'rank_test_score': array([23, 17, 15,  3,  8, 11, 24, 20, 19,  7,  2,  4, 21, 16,  9, 10,  5,\n",
       "        13, 22, 18, 14, 12,  6,  1], dtype=int32),\n",
       " 'split0_test_score': array([-0.61127044, -0.60565746, -0.60709757, -0.60517869, -0.60742963,\n",
       "        -0.60778454, -0.61334918, -0.60905801, -0.60823429, -0.60630345,\n",
       "        -0.60419546, -0.60506856, -0.60994856, -0.60909689, -0.60604211,\n",
       "        -0.60520617, -0.60540111, -0.60766179, -0.60980892, -0.60868015,\n",
       "        -0.6060135 , -0.60615995, -0.60243445, -0.6040815 ]),\n",
       " 'split0_train_score': array([-0.51224731, -0.50681205, -0.49882451, -0.49993069, -0.49788302,\n",
       "        -0.49801361, -0.50303658, -0.49882675, -0.49561647, -0.49404908,\n",
       "        -0.49569592, -0.49510843, -0.50884642, -0.49989388, -0.4984405 ,\n",
       "        -0.49189353, -0.49450137, -0.49198387, -0.50199563, -0.49856878,\n",
       "        -0.49369782, -0.49185859, -0.49126057, -0.48921794]),\n",
       " 'split1_test_score': array([-0.62573731, -0.62503597, -0.62100959, -0.61860587, -0.6174021 ,\n",
       "        -0.61688585, -0.62711253, -0.62252472, -0.61886386, -0.61828032,\n",
       "        -0.61553593, -0.61768071, -0.62458962, -0.62180915, -0.6192957 ,\n",
       "        -0.62046762, -0.6170194 , -0.61859881, -0.6249794 , -0.61994881,\n",
       "        -0.62102216, -0.62219324, -0.6176553 , -0.61616172]),\n",
       " 'split1_train_score': array([-0.51086924, -0.50313856, -0.50003815, -0.49694485, -0.49428918,\n",
       "        -0.4949953 , -0.50466763, -0.49678807, -0.49427409, -0.49265576,\n",
       "        -0.49213784, -0.49072274, -0.50306867, -0.49632306, -0.49142541,\n",
       "        -0.48744928, -0.48960082, -0.49163082, -0.49958285, -0.49364146,\n",
       "        -0.48811493, -0.48548576, -0.48772433, -0.48548912]),\n",
       " 'split2_test_score': array([-0.62151724, -0.61434539, -0.61300324, -0.60981388, -0.60933064,\n",
       "        -0.610815  , -0.62108917, -0.61227652, -0.61356306, -0.605687  ,\n",
       "        -0.60788139, -0.6080855 , -0.61531992, -0.61115491, -0.6096724 ,\n",
       "        -0.6116979 , -0.61090391, -0.61052188, -0.61627577, -0.61400383,\n",
       "        -0.61075137, -0.6107421 , -0.60992889, -0.60945132]),\n",
       " 'split2_train_score': array([-0.5109315 , -0.50601691, -0.49938522, -0.49788456, -0.49899839,\n",
       "        -0.49534499, -0.50824538, -0.50115045, -0.4979806 , -0.49447334,\n",
       "        -0.49054121, -0.49211099, -0.50520649, -0.4960246 , -0.49070768,\n",
       "        -0.48876276, -0.48985871, -0.48969144, -0.50228815, -0.49396077,\n",
       "        -0.48930841, -0.48719598, -0.48683961, -0.49049285]),\n",
       " 'split3_test_score': array([-0.61550191, -0.60669006, -0.61004058, -0.60368616, -0.6077916 ,\n",
       "        -0.61082427, -0.61331601, -0.61218061, -0.6106407 , -0.61008667,\n",
       "        -0.60911587, -0.60647041, -0.61295561, -0.60811399, -0.6091154 ,\n",
       "        -0.60945029, -0.61060436, -0.61142731, -0.61739202, -0.60969328,\n",
       "        -0.6080845 , -0.60740872, -0.61050977, -0.60670928]),\n",
       " 'split3_train_score': array([-0.51066146, -0.5045956 , -0.50041124, -0.4943609 , -0.49416392,\n",
       "        -0.49671094, -0.50672558, -0.50151104, -0.49784051, -0.49534717,\n",
       "        -0.49536295, -0.49135197, -0.50391288, -0.49888456, -0.49424005,\n",
       "        -0.48973972, -0.49301321, -0.49129153, -0.4998593 , -0.49214579,\n",
       "        -0.49052136, -0.48879069, -0.48947789, -0.48815516]),\n",
       " 'split4_test_score': array([-0.61422655, -0.61139561, -0.6102115 , -0.60860474, -0.6103481 ,\n",
       "        -0.60909883, -0.61565077, -0.61364294, -0.61404691, -0.61119838,\n",
       "        -0.60891474, -0.60900239, -0.61412942, -0.61167719, -0.61020634,\n",
       "        -0.60794442, -0.60660142, -0.60775224, -0.61831411, -0.6115663 ,\n",
       "        -0.61153773, -0.60910531, -0.61064381, -0.60868989]),\n",
       " 'split4_train_score': array([-0.51299618, -0.50545305, -0.50082476, -0.49848895, -0.49714543,\n",
       "        -0.49596232, -0.50502394, -0.50174678, -0.49612395, -0.49688476,\n",
       "        -0.49447454, -0.49499503, -0.50551194, -0.50001237, -0.49429358,\n",
       "        -0.49181545, -0.49263271, -0.49173116, -0.50348172, -0.49619429,\n",
       "        -0.49209914, -0.489626  , -0.488604  , -0.48785008]),\n",
       " 'std_fit_time': array([ 0.92975551,  0.17512663,  0.1143893 ,  0.18970755,  0.09090931,\n",
       "         0.52234285,  0.47191597,  0.10940737,  0.33658918,  0.15080383,\n",
       "         0.053359  ,  0.06727782,  0.10308701,  0.11820792,  0.089288  ,\n",
       "         0.238166  ,  0.23102924,  0.12662093,  0.38459289,  0.18645907,\n",
       "         0.10038634,  0.16647431,  0.11761314,  1.20620746]),\n",
       " 'std_score_time': array([ 0.00353995,  0.00376324,  0.00496517,  0.00640099,  0.00146362,\n",
       "         0.00273977,  0.00842921,  0.0048096 ,  0.00198241,  0.00542475,\n",
       "         0.0035006 ,  0.00440094,  0.00524994,  0.00378331,  0.00546482,\n",
       "         0.0024248 ,  0.00298329,  0.00197372,  0.00323325,  0.00157374,\n",
       "         0.00314126,  0.00196991,  0.00183381,  0.01017007]),\n",
       " 'std_test_score': array([ 0.00524259,  0.00696175,  0.00475208,  0.00521148,  0.0036277 ,\n",
       "         0.00311905,  0.00532244,  0.00455003,  0.00357963,  0.00451256,\n",
       "         0.00366096,  0.00442112,  0.00493555,  0.00489711,  0.00445611,\n",
       "         0.00520493,  0.00407719,  0.00399195,  0.00484148,  0.00401793,\n",
       "         0.00515822,  0.0057487 ,  0.00482255,  0.00402619]),\n",
       " 'std_train_score': array([ 0.00091791,  0.00126055,  0.00071516,  0.00185439,  0.00194506,\n",
       "         0.00107601,  0.00178992,  0.00191577,  0.0013984 ,  0.00140317,\n",
       "         0.0019875 ,  0.00184482,  0.00197652,  0.00172476,  0.00272655,\n",
       "         0.00172991,  0.00189705,  0.00081789,  0.00149294,  0.00224441,\n",
       "         0.00197909,  0.00216226,  0.00151992,  0.00165881])}"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch3_1.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.609019 using {'colsample_bytree': 0.9, 'subsample': 0.8}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/karen/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/Users/karen/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/Users/karen/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/Users/karen/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/Users/karen/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/Users/karen/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/Users/karen/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nnU/g+HwIzPzNj4qSG/JTICno8kM9EhcXF3x8fPDx8eHgwYOYmZklJbjUJbX9NwMlJkzkxZGjPPq/\n76i49Fd6NijD2lN3+aSJPRVtXsvt7z4D/A5qlriGHtFUV1SU1OyZAI8u63bMko6anYTpUPVI3q16\nJMlt2rSJdu3aYWZmlmabLJNSFvivunXryuwIWbVKXqtSVYbv3SeDn0fJGt/ulYNWnUm9sd9BKaeY\nS7lvUraOqRQ8165d+++H3eOlXNFet1+7x2c4h9u3b8saNWpIKaXct2+fHDx4sExISJDx8fGyQ4cO\n8vDhw3LTpk1y0KBBSX3CwsKklFKWK1dOBgcHpzn248ePpZ2dnQwICJBSShkSEiKllHLkyJFy6tSp\nUkopDxw4IJ2dnaWUUq5cuVJ++umnUkopa9asKQMDA6WUUj59+lRKKeWLFy9kZGSklFLKW7duyVf/\njr29vaWFhYV88OCBjIqKkqVKlZLffvutlFLKefPmydGjR0sppezbt69s06aNjI+Pl7du3ZKlS5eW\nkZGR0tvbW3bo0EFKKeXEiRPl6tWrk47r4OAgIyIiUn19K1eulCVLlpRPnjyRL1++lDVq1JBnzpyR\nt2/flrVr15ZSShkfHy8rVKggnzx5kuI4r/qXLl066X1J6/2/du2a7Nixo4yJiZFSSjl8+HC5atUq\nKaWUAwcOlGfOaD57LCwsUszP0tIyzf83Ukrp4uIid+zYkebzKX4/E6HJ1J7hZ6w6I9GCVa9ehG3Z\nStD331NhV1OGt6zIrH03ORkQQqMKr9UdqOgC9QbAiV+gaico2zBvJq3kbxmcOeQGVY+k4NcjeeXh\nw4dcvnw5x260VIFEC8LAANsp33Lno548+eUXBn7xJWtP/suMXdfZ9mlT9PReq8HgNh38/tYscQ07\nBkY5cCqpKNkkVT2SAl+P5JUNGzbQrVs3DA0N0x0zq9TFdi2Z1qqF5QcfELp6NQT4Ma5tFS7fD2fb\nxftvNjYuAl0WQqg/HPwu9yerKGlQ9UjerXokr/z555/07Nkz3deWHSqQZILN52PRNzfn0dRpdHa0\nxbG0BbNSu0kRoHxzqD8YTi6Cf0/k/mQVJRXJ65F4eXkl1SNxdHTk/fff5/nz51y+fJkGDRpQq1Yt\nZsyYwTfffAP8V4/ExcUl1bGT1yNxdnbmww8/BGDq1KmcPXsWJycnJkyYkGY9EkdHR2rWrEnz5s2T\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a12d59da0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch3_1.best_score_, gsearch3_1.best_params_))\n",
    "test_means = gsearch3_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch3_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch3_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch3_1.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch3_1.cv_results_).to_csv('my_preds_subsampleh_colsample_bytree_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(colsample_bytree), len(subsample))\n",
    "train_scores = np.array(train_means).reshape(len(colsample_bytree), len(subsample))\n",
    "\n",
    "for i, value in enumerate(colsample_bytree):\n",
    "    pyplot.plot(subsample, -test_scores[i], label= 'test_colsample_bytree:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'subsample' )                                                                                                      \n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'subsample_vs_colsample_bytree1.png' )"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
